// 大数据上报模块

import server from "@/server";
// import { jsLog } from "@/utils/logUtil";
import Store from "@/store";
import { ContentTypes, CTypes, ActionTypes } from "./content";
import { appInfo } from "@/utils";

const allConfigs = Store.getData("allConfigs");
export const WIDGETS = {
    LAST_PAGE: null,
    PAGE: "10.8", // 页面编码
    PLAY_LOADING: "10.8.113", // 播放器加载页面
    FUNC_PANEL_EXPOSE: "10.8.92", // 控制台曝光
    SELECT_PROGRAM_BTN: "10.8.5", // 控制台-【选集】按钮，【选集】节目点击10.8.5.x(最后一位指代第几集)
    SELECT_PROGRAM_SORT: "10.8.5.0", // 【选集】分类，（1-10，11-20，...）
    SEEK_BACKWARD: "10.8.7.1", // 快退
    SEEK_FORWARD: "10.8.7.2", // 快进
    PLAY: "10.8.1", // 播放
    PAUSE: "10.8.2", // 暂停
    COLLECT: "10.8.10.1", // 收藏
    CANCEL_COLLECT: "10.8.10.2", // 取消收藏
    SET_SINGLE_CYCLE: "10.8.111.1", // 设定单集循环
    UNSET_SINGLE_CYCLE: "10.8.111.2", // 取消设定单集循环
    SET_LISTEN_VIDEO: "10.8.114.1", // 听视频
    SET_WATCH_VIDEO: "10.8.114.2", // 看视频
    SET_BLACK_LIST: "10.8.119", // 加黑名单
    BRIEF_BTN: "10.8.102", // 控制台【简介】按钮
    BRIEF_DIALOG: "10.8.102", // 简介弹窗
    BRIEF_DETAIL: "10.8.115", // 简介详情页
    TIMING_BTN: "10.8.112", // 控制台【定时】按钮
    TIMING_LENGTH_SELECT: "10.8.112.1", // 定时时间选择点击
    BUY: "10.8.11", // 控制台【订购】按钮
    RECOMMEND: "10.8.93", // 相关推荐曝光， 相关推荐节目集点击：10.8.93.1(最后一位是位置信息，从1开始，从左到右，从上到下
    PARENT_VERIFY_REST: "40.8", // 家长验证-休息页面
    PARENT_VERIFY_UNLOCK_BTN: "40.8.1", // 休息页面解锁按钮
    PARENT_VERIFY_PANEL: "40.7", // 家长验证（算术题）
    PARENT_VERIFY_ERROR: "40.7.2", // 家长验证（算术题）回答错误提示
};

// 400页面行为上报
export const uploadLog = (eventId, content) => {
    console.log("log400:uploadLog", eventId, content);
    try {
        server.logger({
            utype: "0",
            t: +new Date(),
            event_id: eventId,
            props: content,
            v: 2,
            fastapp_package: `${appInfo.packageName}.${allConfigs.PROVINCE}`,
            fastapp_version: allConfigs.VERSION,
        });
        console.log(
            "log400:success",
            `${appInfo.packageName}.${allConfigs.PROVINCE}`,
            allConfigs.VERSION
        );
    } catch (e) {
        console.log("log400:error", e);
        // jsLog("error", e);
    }
};

// 播放页曝光，弹窗曝光，控制台曝光，简介详情曝光，播放加载页曝光
export const logExpose = ({
    from,
    widget_id,
    channelid_play,
    cid_play,
    pid_play,
}) => {
    const fromValue = from || Store.getData("exposeWidgetId") || WIDGETS.PAGE;
    uploadLog("expose", {
        from: fromValue,
        widget_id,
        // 正在播放的频道id
        channelid_play,
        // 正在播放的节目集id
        cid_play,
        // 正在播放的节目id
        pid_play,
    });
    Store.setData("exposeWidgetId", widget_id);
    if (widget_id != WIDGETS.FUNC_PANEL_EXPOSE) {
        WIDGETS.LAST_PAGE = widget_id;
    }
};

// 上焦上报
export const logFocus = ({
    widget_id,
    sid,
    from_channelid,
    pid_play,
    set_info,
}) => {
    uploadLog("focusctrl", {
        widget_id,
        // 当前播放节目视频的节目集ID，选报，播放点播时必报
        sid,
        // 正在播放的频道id,选报，播放直播时必报
        from_channelid,
        // 正在播放的节目id,选报，播放点播时必报
        pid_play,
        // 上焦的选集信息，选报，选集分类上焦时上报，如1-10
        set_info,
    });
};

// 播放页点击
const handleLogClickCommon = ({
    widget_id,
    from_channelid,
    sid,
    playurl,
    pid_play,
    set_num,
    con_type = ContentTypes.VOD,
    cid,
    channelid,
    url,
    pid,
    text,
    ctype = CTypes.VOD,
    recid,
    cause,
    a_type = ActionTypes.NONE,
}) => {
    return {
        widget_id,
        // 正在播放的频道id,选报，播放直播时必报
        from_channelid,
        // 当前播放节目视频的节目集ID，选报，播放点播时必报
        sid,
        // 当前正在播放的视频的url，必报
        playurl,
        // 当前播放的节目id,必报
        pid_play,
        // 正在播放内容的集数，选报，对于有集数的内容，必报
        set_num,
        // 跳转类型 ContentType， 收视推荐，相关推荐点击必报
        con_type,
        // 节目集id, 点击跳转的内容信息，非当前正在播放的内容信息
        cid,
        // 频道id, 有内容跳转时必报
        channelid,
        // url地址
        url,
        // 节目id, 有内容跳转时必报，跳转的节目id
        pid,
        // 文本内容,例如选择定时时间
        text,
        // 播放类型《终端播放类型定义》CTypes
        ctype,
        // 推荐唯一ID, 收视推荐，相关推荐点击上报
        recid,
        // 推荐理由, 推荐内容这两个字段不能为空
        cause,
        // 跳转类型，沉浸式播放器“看正片”按钮点击时必报 ActionTypes
        a_type,
    };
};

// 播放页点击（手动）
export const logClick = (params) => {
    uploadLog("click", handleLogClickCommon(params));
};

// 播放页点击（自动）
export const logClickAuto = (params) => {
    uploadLog("autoclick", handleLogClickCommon(params));
};

// 相关推荐曝光
export const logRecommend = ({
    widget_id,
    type,
    from_channelid,
    sid,
    playurl,
    set_num,
    pid_play,
    content_array,
}) => {
    uploadLog("goods_expose", {
        widget_id,
        // 1:推荐板块整体曝光，2:板块内部内容落焦
        type,
        // 来源频道id，选报，相关推荐曝光时，播放的是直播时必报
        from_channelid,
        // 当前所属详情页的节目集id或者正在播放视频的节目集ID,选报，正在播放的为点播有节目集id时和有节目集id的回看时必报
        sid,
        // 当前页面的正在播放的视频url, 选报，相关推荐获取不到频道id时报此项
        playurl,
        // 集号,选报，正在播放内容的集数
        set_num,
        // 正在播放的节目id,选报，有节目id时必报
        pid_play,
        // 相关推荐曝光内容信息，选报，相关推荐视频列表曝光上报（可视范围曝光）
        // 数组形式，每个视频内容上报5个字段：recid:推荐唯一id，cid:曝光内容的节目集id，pid:曝光内容的节目id，index：位置的顺序，cause：推荐理由
        content_array,
    });
};

// 家长控制曝光
export const logParentVerifyExpose = ({ from, widget_id }) => {
    const fromValue = from || Store.getData("exposeWidgetId") || WIDGETS.PAGE;
    uploadLog("expose", {
        from: fromValue,
        widget_id,
        fastapp_package: `${appInfo.packageName}.${allConfigs.PROVINCE}`,
        fastapp_version: allConfigs.VERSION,
    });
    Store.setData("exposeWidgetId", widget_id);
    WIDGETS.LAST_PAGE = widget_id;
};

// 家长控制点击
export const logParentVerifyClick = ({ widget_id, phone_no }) => {
    console.log("logParentVerifyClick:phone_no", JSON.stringify(phone_no));
    uploadLog("click", {
        widget_id,
        // 手机号，选报，解锁登录的手机账号，点击解锁按钮是必报
        phone_no: phone_no || "", // TODO 获取手机号
        fastapp_package: `${appInfo.packageName}.${allConfigs.PROVINCE}`,
        fastapp_version: allConfigs.VERSION,
    });
};

// 页面曝光
export const pageExpose = function (params, name="expose", isUpdate=true) {
    const fromValue =
        params?.from || WIDGETS.LAST_PAGE || Store.storeData.entryPage?.pageFrom;
    uploadLog(name, {
        from: fromValue,
        ...params,
    });
    if (isUpdate) {
        WIDGETS.LAST_PAGE = params?.widget_id;
    }
    
};
